package calculatorPaxFileReader;

import java.util.ArrayList;
import java.util.List;

import calculatorAircraftFileReader.AircraftFileVariables;
import calculatorEngine.CenterWeightProcessor;
import calculatorEngine.PassengerMappingAssistant;
import calculatorEngine.PassengerStanding;
import calculatorEngine.Seat;

public class SitDownSir {

	//List<PassengerStanding> business = new ArrayList<PassengerStanding>();
	//List<PassengerStanding> economy = new ArrayList<PassengerStanding>();
	List<PassengerStanding> paxList;
	ArrayList<Seat[]> paxListOfArrays;
	AircraftFileVariables acft;
	public double[] idealnySrodekCiezkosci;

	public SitDownSir(List<PassengerStanding> paxList,
			ArrayList<Seat[]> paxListOfArrays, String acftFilePath) {
		this.paxList = paxList;
		this.paxListOfArrays = paxListOfArrays;
		acft = new AircraftFileVariables(acftFilePath);
	}

	public List<Seat> paxSitting() {
		/*
		 * int oWC = acft.aircraftOptimalWeightCenter(); int nOC =
		 * acft.aircraftColumnsNumber(); int pxL = paxList.size() / 2; int list
		 * = oWC * nOC; for( int i = 0; i < pxL; i++){ if(paxAdded.get(list -
		 * 1).getComfortClass() == 3 ){ list -= 2;} else{ list--;}} for( int a =
		 * 0; a < paxList.size(); a++){ if(paxAdded.get(list).getStatus() == 2){
		 * if(paxAdded.get(list).getComfortClass() == 3){ list++; a--;} else{
		 * paxAdded.get(list).setStatus(1);
		 * paxAdded.get(list).setTicketNumber(paxList.get(a).getTicketNo());
		 * paxAdded.get(list).addFirstName(paxList.get(a).getFirstName());
		 * paxAdded.get(list).addLastName(paxList.get(a).getLastName());
		 * if(paxAdded
		 * .get(list).getPreferences().equals(paxList.get(a).getPreferences())
		 * == true){ paxAdded.get(list).setHappiness("YES"); } else{
		 * paxAdded.get(list).setHappiness("NOT"); } list++; }} else { list++;
		 * a--; }} return paxAdded;
		 */
		//double[] CWP = CenterWeightProcessor.getWeightCenter(paxListOfArrays);
		// double[] oCWP =
		// CenterWeightProcessor.getPresentageCenterWeightDelta(paxListOfArrays,
		// CWP);
		idealnySrodekCiezkosci = new double[] { 0, -((paxListOfArrays.size()-1)/2 - (acft.aircraftOptimalWeightCenter() -1)) };

		/*int oB = 0;
	int oC = 0;
		for (int jU = 0; jU < paxList.size(); jU++) {
			if (paxList.get(jU).getPCClass().equals("B")) {
				business.add(paxList.get(jU));
			} else {
				economy.add(paxList.get(jU));
			}}*/

		
		for (int p = 0; p < paxList.size(); p++) {

			if (paxList.get(p).getPCClass().equals("B")) {

				int[] pMiejsca = PassengerMappingAssistant.suggestSeatMakeThemHappy(
						paxListOfArrays, Seat.BUSINESS_CLASS, paxList.get(p).getPMAPreference(), idealnySrodekCiezkosci);
			/*	while (oB < business.size()
						&& (business
								.get(oB)
								.getPreferences()
								.equals(paxListOfArrays.get(pMiejsca[1])[pMiejsca[0]]
										.getPreferences()) == false)) {
					oB++;
				}
				if (oB == business.size()) {
					oB -= 1;
				} */

				paxListOfArrays.get(pMiejsca[1])[pMiejsca[0]].setStatus(1);
				paxListOfArrays.get(pMiejsca[1])[pMiejsca[0]]
						.setTicketNumber(paxList.get(p).getTicketNo());
				paxListOfArrays.get(pMiejsca[1])[pMiejsca[0]]
						.addFirstName(paxList.get(p).getFirstName());
				paxListOfArrays.get(pMiejsca[1])[pMiejsca[0]]
						.addLastName(paxList.get(p).getLastName());

				if ((paxListOfArrays.get(pMiejsca[1])[pMiejsca[0]]
						.getPreferences().equals(
								paxList.get(p).getPreferences()) == true
								|| paxList.get(p).getPreferences().equals(Seat.NONE))) {
					paxListOfArrays.get(pMiejsca[1])[pMiejsca[0]]
							.setHappiness(Seat.HAPPY);
				}

				else {
					paxListOfArrays.get(pMiejsca[1])[pMiejsca[0]]
							.setHappiness(Seat.NOT_HAPPY);
				}

			//	business.remove(oB);

			}

			else {

				int[] pIMiejsca = PassengerMappingAssistant.suggestSeatMakeThemHappy(
						paxListOfArrays, Seat.ECONOMIC_CLASS, paxList.get(p).getPMAPreference(), idealnySrodekCiezkosci);
			/*	while (oC < economy.size()
						&& (economy
								.get(oC)
								.getPreferences()
								.equals(paxListOfArrays.get(pIMiejsca[1])[pIMiejsca[0]]
										.getPreferences()) == false)) {
					oC++;
				}
				if (oC == economy.size()) {
					oC -= 1;
				}*/

				paxListOfArrays.get(pIMiejsca[1])[pIMiejsca[0]].setStatus(1);
				paxListOfArrays.get(pIMiejsca[1])[pIMiejsca[0]]
						.setTicketNumber(paxList.get(p).getTicketNo());
				paxListOfArrays.get(pIMiejsca[1])[pIMiejsca[0]]
						.addFirstName(paxList.get(p).getFirstName());
				paxListOfArrays.get(pIMiejsca[1])[pIMiejsca[0]]
						.addLastName(paxList.get(p).getLastName());

				if (paxListOfArrays.get(pIMiejsca[1])[pIMiejsca[0]]
						.getPreferences().equals(
								paxList.get(p).getPreferences()) == true 
								|| paxList.get(p).getPreferences().equals(Seat.NONE) ) {
					paxListOfArrays.get(pIMiejsca[1])[pIMiejsca[0]]
							.setHappiness(Seat.HAPPY);
				}

				else {
					paxListOfArrays.get(pIMiejsca[1])[pIMiejsca[0]]
							.setHappiness(Seat.NOT_HAPPY);
				}

			//	economy.remove(oC);

			}

		}

		List<Seat> thisListMadeMeCry = new ArrayList<Seat>();
		for (int pI = 0; pI < paxListOfArrays.size(); pI++) {
			for (int pII = 0; pII < paxListOfArrays.get(0).length; pII++) {
				thisListMadeMeCry.add(paxListOfArrays.get(pI)[pII]);
			}
		}

		return thisListMadeMeCry;

	}
	
	
	public double[] getISC(){
		return idealnySrodekCiezkosci;
	}
	

}
